#include "No7/Global/ClearGlobalMacros.h"

#define CORE
#include "No7/Global/GlobalMacros.h"
#undef CORE
namespace nmspc {};

#define _2D

#ifdef NO7_PLATFORM_WINDOWS
#if NO7_DYNAMIC_LINK
	#ifdef NO7_BUILD_DLL
		#define NO7_API __declspec(dllexport)
	#else
		#define NO7_API __declspec(dllimport)
	#endif // NO7_BUILD_DLL
#else
	#define NO7_API
#endif // NO7_DYNAMIC_LINK
#else
	#error No7 only supports Windows!
#endif // NO7_PLATFORM_WINDOWS

#ifdef NO7_DEBUG
	#define NO7_ENABLE_ASSERTS
#endif // NO7_DEBUG

#ifdef NO7_ENABLE_ASSERTS
	#define NO7_CLIENT_ASSERT(x, ...) { if(!(x)) { NO7_CLIENT_LOG_ERROR("Assertion Failed: {0}", __VA_ARGS__); __debugbreak(); } }
	#define NO7_CORE_ASSERT(x, ...) { if(!(x)) { NO7_CORE_LOG_ERROR("Assertion Failed: {0}", __VA_ARGS__); __debugbreak(); } }
#else
	#define NO7_CLIENT_ASSERT(x, ...)
	#define NO7_CORE_ASSERT(x, ...)
#endif // NO7_ENABLE_ASSERTS

#define BIT(x) (1 << (x))

#define NO7_BIND_EVENT_FUNCTION(func) std::bind(&func, this, std::placeholders::_1)